Chod hore
Predchádzajúca stránka Nasledujúca stránka Začiatok kapitoly Koniec kapitoly Začiatok kurzu Koniec kurzu


12. KLAVIATÚRA, OBRAZOVKA


Táto časť je venovaná klaviatúre, otázke čakania, zvuku a obrazovke (farba a okná). Všetky tieto činnosti sú definované v jednotke Crt a preto túto jednotku v týchto prípadoch treba pripojiť k nášmu programu.



12.1 Čítanie z klávesnice


Pri použití príkazov Read a ReadLn spôsob zápisu znakov určuje užívateľ a program do tejto činnosti nezasahuje do tej doby, kým užívateľ nestlačí klávesu ENTER. Zadávané znaky sa objavia na obrazovke. Text sa dá upravovať. Napr. po stlačení klávesy ESC sa zadávané znaky stratia z obrazovky atď. Jedinou možnosťou je obmedziť počet zadávaných znakov (procedúra SetTextBuf). Často je potrebné obísť príkaz Read a bezprostredne po zadaní znaku ho overiť a patričným spôsobom reagovať. Dokonca neprípustné znaky neprijmeme a ani nebudeme zobrazovať na obrazovke.

Po stlačení klávesy sa vykonajú nasledujúce činnosti:

  • Do bufra klávesnice sa zapíše kód klávesy (1 Byte). Ak napr. stlačíme 'a', potom sa zapíše 97, pre '2' - 50, pre '=' - 61 do bufra klávesnice. Ak pritom budeme mať stlačený SHIFT, potom to budú 'A' - 65, '@' - 64, '+' - 43.
  • Môže sa stať, že vznikne dvojica kódov. Základných kláves na klávesnici je cca. 100. Môžeme ich modifikovať klávesmi SHIFT, CTRL a ALT. Takto môže vzniknúť viac ako 256 možností a teda na ich zobrazenie nestačí 1 Byte. V prípade dvojice kódov klávesy - prvý kód bude 0. Napr. kód klávesy F1 je 0+59 atď.
  • Môže sa stať, že niektorý kláves negeneruje kód napr. stlačenie samotného CTRL alebo SHIFT.

Kódy kláves sa dostanú do bufra klávesnice v tom poradí ako boli stláčané. Jednotlivo vyberať kódy z bufra môžeme pomocou funkcie ReadKey.


ReadKey

Táto funkcia má typ Char a vyberie prvý kód z bufra. Tento kód sa z bufra vymaže. Ak bufer je prázdny, potom funkcia čaká na stlačenie klávesy. Dvojicu kódov musíme ošetriť my. Teda ak kód je #0, potom musíme načítať druhý kód dvojice. Táto funkcia nemení pozíciu kurzora a na obrazovke sa nezobrazí.

Bufer klávesnice funguje ako riadok - vybrať môžeme vždy iba prvý a vkladať môžeme vždy iba na koniec.

Obr12_1

Ale len v tom prípade, ak bufer kláves bol predtým prázdny.
Ak pracujeme s 6.0 verziou Turbo Pascalu, potom musíme zapnúť riadenie prekladača s príkazom {$X+}, aby povolil volať funkciu ako procedúru.

Nasledujúcou funkciou vieme zistiť, či je niečo v bufry.


KeyPressed

Má typ Boolean - ak je v bufry kód, potom jej hodnota je True, inak False. Obsah bufra sa nemení.

Program môže pred načítaním vyčistiť bufer kláves:
Teraz čakajme na stlačenie klávesy ENTER:

...
While KeyPressed Do ReadKey ;

Po tomto fragmente program po nasledujúcom príkaze ReadKey alebo ReadLn už bude čakať na nový vstup.



12.2 Čakanie


Stáva sa, že potrebujeme aby program čakal istú dobu a pritom nič nerobil. Nasledujúca procedúra slúži na tento účel:

Delay(Tisícina_sekundy)
Táto procedúra čaká bez činnosti zadaný počet Tisícina_sekundy tisícin sekundy. V takomto prípade iba CTRL-C dokáže prerušiť "beh" programu. Je nebezpečné použiť príliš veľký časový interval, lebo užívateľ v tomto prípade (bez výpisu) nebude vedieť prečo sa nič nedeje.

Spomalený výpis textu:

Obr12_2


Píšme užívateľsky prítulné programy!

Nechajme na užívateľa, že kedy chce pokračovať a teda je často vhodnejšie riešiť túto situáciu pomocou príkazu While KeyPressed Do ReadKey ; alebo napr.:

Obr12_3



12.3 Zvuky


Pomocou nasledujúcej procedúry môže náš program "vydavať" zvuky:


Sound(Frekvencia) ;
Frekvencia je hodnota typu Word a predstavuje frekvenciu zvuku, ktorý má vydať počítač. Súčasne môže zvučať iba jeden zvuk. Takto zapíname vydávanie zvuku a ukončíme ho procedúrou NoSound.

Napr. ak chceme vydať zvuk štandardného tónu "a" počas doby jednej sekundy:

Sound(440) ;
Delay(1000) ;
NoSound ;

Pozor! Nenechávajme vydávanie zvuku, lebo jeho vypnutie je možné iba programom alebo vypnutím počítača.